

package com.librairie;

import com.client.domain.Utilisateur;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateful;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;

/**
 *
 * @author Julien
 */
@Stateful
public class UtilisateurManager implements UtilisateurManagerRemote {

    @PersistenceContext
    private EntityManager EM;
    private Utilisateur linkedUser;
   
    
    @Override
    public void addClient (Utilisateur user){
       if (!userAlreadyExistsInDatabase(user)) {
            EM.persist(user);
        } 
       else {
           
       }
    }
    

     @Override
       public Utilisateur getLinkedUser() {
        return linkedUser;
    }
 @Override
    public void setLinkedUser(Utilisateur linkedUser) {
        this.linkedUser = linkedUser;
    }
    

    
       @Override
     public boolean authentification(String login, String pwd) {
 /**
     * Permet de vérifier l'existance d'un utilisateur en base de données en fonction
     * de son login et password. 
     * 
     * @param user utilisateur avec login et password non crypté.
     * @return le même utilisateur si l'authentification a échouée, ou un utilisateur
     *         dont les attributs sont renseignés 
     *         si l'authentification a réussie.
     */
        List<Utilisateur> listUtilisateur = new ArrayList<Utilisateur>() ;
        
                 Query q = EM.createNamedQuery("Utilisateur.auth");
                
                 q.setParameter("login", login);
                 q.setParameter("pwd", pwd);
                 
                 listUtilisateur = q.getResultList();
                 
                 if(listUtilisateur.size() == 1 ){
                     return true;
                 }
                 else{
                 return false;
              }   
           
        }
     @Override 
     public List<Utilisateur> recupUserList (String login){
        
         
         List<Utilisateur> ListUser = new ArrayList<Utilisateur>() ;
         
         
                 Query q = EM.createNamedQuery("Utilisateur.name");
                
                 q.setParameter("login", login);
                 
                 ListUser = q.getResultList();
                 
                 return ListUser;
                 
     }

     @Override
     public boolean userAlreadyExistsInDatabase(Utilisateur user) {
        Query query = EM.createQuery("SELECT u FROM Utilisateur u WHERE u.login = :login");
        query.setParameter("login", user.getLogin());
        try {
            user = (Utilisateur) query.getSingleResult();
        } catch (NoResultException e) {
            user = null;
        }

        return (user != null);
          }
    }
